home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / p063b9s.zip / UNIT / LOGFILE.PAS < prev    next >
Pascal/Delphi Source File  |  1996-04-20  |  5KB  |  197 lines

  1. UNIT LogFile;
  2. {╔══════════════════════════════════════════════════════════════════════════╗}
  3. {║ Routines to open, close & add to the log      Last changed: 20.04.96  SA ║}
  4. {║                                                                          ║}
  5. {║                         (C) Copyright 1989-95 by                         ║}
  6. {║       Dan Wulff, Jens Sandalgaard, Steen Christensen & S¢ren Ager        ║}
  7. {║                                                                          ║}
  8. {║ This source may not be given to anybody, without the written permission  ║}
  9. {║ from The Portal Team.                                                    ║}
  10. {╚══════════════════════════════════════════════════════════════════════════╝}
  11. {$I POPDEFS.INC}
  12.  
  13. INTERFACE
  14.  
  15. USES Use32, NetFile;
  16.  
  17. CONST
  18.   LogFileOpen : Boolean = False;
  19.  
  20. VAR
  21.   LogLines : Byte;
  22.   PortalLog : TNetFile;
  23.  
  24. PROCEDURE WriteLogLine(s: String; i:Byte);
  25. PROCEDURE OpenPortalLog;
  26. PROCEDURE ClosePortalLog(NewLine: Boolean);
  27. PROCEDURE ReWriteLogWindow;
  28. PROCEDURE AddLog(Prefix : Char; CONST Message : String);
  29. {$IFDEF StackCheck}
  30. PROCEDURE LogStackUsage;
  31. {$ENDIF}
  32.  
  33. IMPLEMENTATION
  34.  
  35. USES OpCrt, OpDate, OpString,
  36. {$IFDEF StackCheck}
  37.      OpStack,
  38. {$ENDIF}
  39. {$IFNDEF NoOverlay}
  40.      Overlay,
  41. {$ENDIF}
  42.      ScrBlank, FileUtil, PoPTypes, Globals, StrUtil;
  43.  
  44.   PROCEDURE WriteLogLine(s: String; i: Byte);
  45.   VAR
  46.     t : String;
  47.     j : Byte;
  48.   BEGIN
  49.     IF (LogFileOpen) AND (s<>'') THEN
  50.     BEGIN
  51.       IF Pos(' PORTAL ',s) IN [18,21] THEN  {PORTAL.LOG}
  52.       BEGIN
  53.         IF Cfg.UseYearInLog THEN
  54.           s:=' '+Copy(s,1,2)+Copy(s,13,9)+Copy(s,29,255)
  55.         ELSE
  56.           s:=' '+Copy(s,1,2)+Copy(s,10,9)+Copy(s,26,255);
  57.         ActivityWindow^.wFastText(Copy(s,1,76),i,1);
  58.       END ELSE
  59.       BEGIN
  60.         t:=' '+Copy(s,1,2)+Copy(s,10,9);
  61.         Delete(s, 1, 18);
  62.         j:=Pos(' ',s);
  63.         s:=t+Trim(Copy(s,j+1,255));
  64. {
  65. > 02 Jun 21:39:38 SPRBBS Alan Kwok online at 2400 bps
  66.          1         2         3
  67. 123456789012345678901234567890
  68. }
  69.         ActivityWindow^.wFastWrite(Copy(s,1,76),i,1,Cfg.Color[1].FieldColor);
  70.       END;
  71.     END;
  72.   END;
  73.  
  74.   PROCEDURE OpenPortalLog;
  75.   BEGIN
  76.     IF Cfg.LogFileName<>'' THEN
  77.     BEGIN
  78.       IF NOT PortalLog.Open(ReplaceEnv(Cfg.LogFileName), 1, True) THEN
  79.       BEGIN
  80.         FastWrite('Unable to open log-file',Screenheight,1,7);
  81.         GotoXYAbs(1,ScreenHeight);
  82.         Halt(250);
  83.       END ELSE
  84.       BEGIN
  85.         LogFileOpen:=True;
  86. {$IFDEF StackCheck}
  87.         ReportStackUsage:=False;
  88. {$ENDIF}
  89.       END;
  90.       PortalLog.Seek(PortalLog.FileSize);
  91.     END;
  92.   END;
  93.  
  94.   PROCEDURE ClosePortalLog(NewLine: Boolean);
  95.   BEGIN
  96.     IF LogFileOpen THEN
  97.     BEGIN
  98.       IF NewLine THEN
  99.       BEGIN
  100.         PortalLog.Seek(PortalLog.FileSize);
  101.         PortalLog.WriteLine('');
  102.       END;
  103.       PortalLog.Close;
  104.       LogFileOpen:=False;
  105.     END;
  106.   END;
  107.  
  108.   PROCEDURE UpdateActivityWindow(CONST s: String);
  109.   BEGIN
  110.     WITH ActivityWindow^ DO
  111.     BEGIN
  112.       ActivateWrite;
  113.       ScrollVert(1);
  114.       wfasttext(Copy(s,1,76),ScreenHeight-12-Byte(ScreenHeight>LinesForStat)*7,1);
  115. {$IFDEF UseScrollBars}
  116.       ChangeScrollBar(FrRR,1,FileSize(PortalLog));
  117.       DrawSlider(FrRR,FileSize(PortalLog));
  118. {$ENDIF}
  119.       DeactivateWrite;
  120.     END;
  121.   END;
  122.  
  123.   PROCEDURE ReWriteLogWindow;
  124.   VAR
  125.     i : Byte;
  126.     s : String;
  127.   BEGIN
  128.     IF Not LogFileOpen THEN Exit;
  129.     WITH ActivityWindow^ DO
  130.     BEGIN
  131.       ActivateWrite;
  132.       Clear;
  133.       PortalLog.Seek(CurrentLogView[1]);
  134.       FOR i:=1 TO LogLines DO
  135.         IF (CurrentLogView[i]<>0) THEN
  136.         BEGIN
  137.           PortalLog.ReadLine(s);
  138.           WriteLogLine(s,i);
  139.         END;
  140.       CurrentLogView[LogLines+1]:=PortalLog.FilePos;
  141.       DeactivateWrite;
  142.     END;
  143.   END;
  144.  
  145.   PROCEDURE AddLog(Prefix: Char; CONST Message: String);
  146.   VAR
  147.     s : string ;
  148.     LogDate,
  149.     LogTime  : String[10];
  150.   BEGIN
  151.     IF Not LogFileOpen THEN Exit;
  152.     IF Cfg.UseYearInLog THEN LogDate:=TodayString('dd nnn yy') ELSE
  153.                              LogDate:=TodayString('dd nnn');
  154.     LogTime:=CurrentTimeString('hh:mm:ss');
  155.     TurnScreen(On);
  156.     IF cfg.logfilename<>'' THEN
  157.     BEGIN
  158.       IF pos(Prefix, '!*+:# ')<=cfg.loglevel+1 THEN
  159.       BEGIN
  160. {$IFNDEF JS}
  161.         s:=Prefix+' '+LogDate+' '+LogTime+' PORTAL '+Copy(Message,1,225);
  162. {$ELSE}
  163.         s:=Prefix+' '+LogDate+' '+LogTime+' POP  '+Copy(Message,1,225);
  164. {$ENDIF}
  165.         IF EndLogView[1]<>CurrentLogView[1] THEN
  166.         BEGIN
  167.           CurrentLogView:=EndLogView;
  168.           ReWriteLogWindow;
  169.         END;
  170.         Move(EndLogView[2],EndLogView[1],(LogLines)*SizeOf(LongInt));
  171.         EndLogView[LogLines]:=PortalLog.FilePos;
  172.         CurrentLogView:=EndLogView;
  173.         PortalLog.Seek(PortalLog.FileSize);
  174.         PortalLog.WriteLine(s);
  175.         CurrentLogView[LogLines+1]:=PortalLog.FileSize;
  176.       END;
  177.     END;
  178.     UpdateActivityWindow(' '+Prefix+' '+LogTime+' '+Message);
  179.   END;
  180.  
  181. {$IFDEF StackCheck}
  182.   PROCEDURE LogStackUsage;
  183.   VAR
  184.     StackUsage : Word;
  185.     HeapUsage : LongInt;
  186.     FreeUsage : Word;
  187.     MemUsage : LongInt;
  188.   BEGIN
  189.     CalcStackUsage(StackUsage, HeapUsage, FreeUsage, MemUsage);
  190.     AddLog('!', 'Stack usage: '+Long2Str(StackUsage)+
  191.                 '  Heap usage: '+Long2Str(HeapUsage{$IFNDEF NoOverlay}-OvrGetBuf{$ENDIF})+
  192.                 '  Memory usage: '+Long2Str(MemUsage));
  193.   END;
  194. {$ENDIF}
  195.  
  196. END.
  197.